﻿

namespace KinonekoSoftware.Foundation.UI.Controls
{
#if AVALONIA
    
    using Avalonia;
    using Avalonia.Controls;
    using Avalonia.Input;

    public abstract partial class ForestButtonBase : Button
    {
        public static readonly StyledProperty<Geometry> IconProperty;
        public static readonly StyledProperty<bool>     IsFilledProperty;
        public static readonly StyledProperty<int>      StrokeThicknessProperty;
        public static readonly StyledProperty<double>   IconSizeProperty;
        public static readonly StyledProperty<IconMode> IconModeProperty;

        static ForestButtonBase()
        {

            IconProperty            = AvaloniaProperty.Register<ForestButtonBase, Geometry>(nameof(Geometry));
            IsFilledProperty        = AvaloniaProperty.Register<ForestButtonBase, bool>(nameof(IsFilled));
            IconSizeProperty        = AvaloniaProperty.Register<ForestButtonBase, double>(nameof(IconSize));
            IconModeProperty        = AvaloniaProperty.Register<ForestButtonBase, IconMode>(nameof(IconMode));
            StrokeThicknessProperty = AvaloniaProperty.Register<ForestButtonBase, int>(nameof(StrokeThickness));
        }




        //------------------------------------------------
        //
        //  Properties
        //
        //------------------------------------------------

        #region Properties

        public IconMode IconMode
        {
            get => GetValue(IconModeProperty);
            set => SetValue(IconModeProperty, value);
        }

        public double IconSize
        {
            get => GetValue(IconSizeProperty);
            set => SetValue(IconSizeProperty, value);
        }

        public bool IsFilled
        {
            get => GetValue(IsFilledProperty);
            set => SetValue(IsFilledProperty, value);
        }

        public Geometry Icon
        {
            get => GetValue(IconProperty);
            set => SetValue(IconProperty, value);
        }

        public int StrokeThickness
        {
            get => GetValue(StrokeThicknessProperty);
            set => SetValue(StrokeThicknessProperty, value);
        }

        #endregion
    }
#endif
}